#include <math.h> 

float gammln(float xx) 

//Returns the logarithm of the gamma function, i.e. the value ln[Γ(xx)] for xx>0.
{ 
	//Internal arithmetic will be done in double precision, a nicety that you can omit if ﬁve-ﬁgure accuracy is good enough. 	
	double x,y,tmp,ser; 
	static double cof[6]={76.18009172947146,-86.50532032941677,24.01409824083091,-1.231739572450155,0.1208650973866179e-2,-0.5395239384953e-5}; 
	int j; 
	y=x=xx; 
	tmp=x+5.5; 
	tmp-=(x+0.5)*log(tmp); 
	ser=1.000000000190015; 
	for(j=0;j<=5;j++)
		ser+=cof[j]/++y; 
	return -tmp+log(2.5066282746310005*ser/x); 
} 
